package br.com.sadim.hospital;

import java.io.Serializable;
import java.sql.Time;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;



import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.drerp.financeiro.service.PlanoSaude;
import br.com.sadim.diagnostico.Doenca;
import br.com.sadim.diagnostico.Sintoma;
import br.com.sadim.paciente.Paciente;


@Entity
@Table (name="consulta")
public class Consulta implements Serializable{
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	private Integer	idConsulta;

	@ManyToOne
	@JoinColumn(name="idUsuario", insertable=true, updatable=true)
	private Usuario medico;

	@ManyToOne
	@JoinColumn(name="idPaciente", insertable=true, updatable=true)
	private Paciente paciente;


	@OneToMany(cascade=CascadeType.PERSIST)
	@JoinColumn(name = "idConsulta")
	private List<Exame> exame;
	
	@OneToMany(cascade=CascadeType.PERSIST)
	@JoinColumn(name = "idConsulta")
	private List<Receituario> receituario;


	@Temporal(TemporalType.TIMESTAMP)   
	@Column(name="dataConsulta")
	private Date dataConsulta;

	@Column(name="hora")
	private HoraConsulta horaConsulta;
	
	@Column(name="horaChegadaPaciente")
	private Date horaChegadaPaciente;
	
	@Column(name="horaAtendimento")
	private Date horaAtendimento;
	
	@Column(name="horaFinalizada")
	private Date horaFinalizada;
	
	@Column(name="observacao")
	private String observacao;
	
	@ManyToMany(cascade = CascadeType.PERSIST)
	public List<Sintoma> sintomas;
	
	@ManyToMany(cascade=CascadeType.PERSIST)
	private List<ProcedimentoConsulta> procedimento;

	@ManyToMany(cascade = CascadeType.PERSIST)
	public List<Doenca> diagnosticos;

	
	@Column(name="status")
	private StatusConsulta status;
	
	@Column(name="convenio")
	private String convenio;
	
	@Column(name="tipoConsulta")
	private String tipoConsulta;
	
	@OneToOne
	@JoinColumn(name="idNotaFiscal", insertable=true, updatable=true)
	private NotaFiscalConsulta notaFiscal;
	
	public Date getDataConsulta() {
		return dataConsulta;
	}

	public void setDataConsulta(Date dataConsulta) {
		this.dataConsulta = dataConsulta;
	}
	
	public String getDataConsultaString() {
		if(dataConsulta!= null) {
			SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
			return formatter.format(dataConsulta);
		}
		return null;
	}

	public Usuario getMedico() {
		return medico;
	}

	public void setMedico(Usuario medico) {
		this.medico = medico;
	}

	public Integer getIdConsulta() {
		return idConsulta;
	}

	public void setIdConsulta(Integer idConsulta) {
		this.idConsulta = idConsulta;
	}

	public Paciente getPaciente() {
		return paciente;
	}

	public void setPaciente(Paciente paciente) {
		this.paciente = paciente;
	}

	public List<Sintoma> getSintomas() {
		return sintomas;
	}

	public void setSintomas(List<Sintoma> sintomas) {
		this.sintomas = sintomas;
	}

	public List<Exame> getExame() {
		return exame;
	}

	public void setExame(List<Exame> exame) {
		this.exame = exame;
	}

	public HoraConsulta getHoraConsulta() {
		return horaConsulta;
	}

	public void setHoraConsulta(HoraConsulta horaConsulta) {
		this.horaConsulta = horaConsulta;
	}

	public List<Doenca> getDiagnosticos() {
		return diagnosticos;
	}

	public void setDiagnosticos(List<Doenca> diagnosticos) {
		this.diagnosticos = diagnosticos;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	public List<Receituario> getReceituario() {
		return receituario;
	}

	public void setReceituario(List<Receituario> receituario) {
		this.receituario = receituario;
	}

	
	public String getStatusString() {
		return status.getStatus();
	}

	public StatusConsulta getStatus() {
		return status;
	}

	public void setStatus(StatusConsulta status) {
		this.status = status;
	}

	public Date getHoraChegadaPaciente() {
		return horaChegadaPaciente;
	}

	public void setHoraChegadaPaciente(Date horaChegadaPaciente) {
		this.horaChegadaPaciente = horaChegadaPaciente;
	}

	public Date getHoraAtendimento() {
		return horaAtendimento;
	}

	public void setHoraAtendimento(Date horaAtendimento) {
		this.horaAtendimento = horaAtendimento;
	}

	public Date getHoraFinalizada() {
		return horaFinalizada;
	}

	public void setHoraFinalizada(Date horaFinalizada) {
		this.horaFinalizada = horaFinalizada;
	}

	public String getConvenio() {
		return convenio;
	}

	public void setConvenio(String convenio) {
		this.convenio = convenio;
	}

	public String getTipoConsulta() {
		return tipoConsulta;
	}

	public void setTipoConsulta(String tipoConsulta) {
		this.tipoConsulta = tipoConsulta;
	}

	public List<ProcedimentoConsulta> getProcedimento() {
		return procedimento;
	}

	public void setProcedimento(List<ProcedimentoConsulta> procedimento) {
		this.procedimento = procedimento;
	}

	public NotaFiscalConsulta getNotaFiscal() {
		return notaFiscal;
	}

	public void setNotaFiscal(NotaFiscalConsulta notaFiscal) {
		this.notaFiscal = notaFiscal;
	}

}
